Current graphics data processors have processing units that perform specific operations on graphics data, e.g., linear interpolation, tessellation, rasterization, texture mapping, depth testing, and the like. These graphics processors typically include several fixed-function computation units that perform specific operations. More recently, these computation units have added the ability to be programmed to perform user-specified operations.
While computation units included in each graphics processor can vary, a common element is a sampling unit that processes graphics primitives (basic geometrical constructs, such as points, lines, triangles, quadrilaterals, meshes) and generates sub-primitive data (such as pixel data or fragment data). A graphics processor uses a sampling unit and computation units to convert graphics primitives into sub-primitive data and generate image data.
Graphics processors use memory to store graphics data and program instructions, where graphics data is any data that is input to or output from the computation units within the graphics processor. Graphics memory is any memory used to store graphics data or program instructions to be executed by the graphics processor. Graphics memory can include portions of system memory, local memory directly coupled to the graphics processor, register files coupled to the computation units within the graphics processor, and the like.
“Compositing” is the technique of combining multiple source images, to build up a more-complex destination image, called the “frame”. Each pixel in an image can have one or more associated matte components that describe coverage, opacity, depth, or other user-defined information. During compositing, the one or more matte components are combined using compositing operations to generate the composited frame. For example, one may desire to combine a first source image of a person in front of a blue background, with a second source image of a rendered scene. To accomplish this, the person is separated from the blue background using the “chroma-key” compositing operation, and the person is overlaid onto the second image using the “over” compositing operation. The final composited frame is an image showing the person in front of the rendered scene.
Traditionally, digital image compositing has employed general-purpose processors, due to its needs for high-precision floating-point calculations, and for programming flexibility. The use of graphics processors has typically been limited to generating individual source image elements for the final composite, by rendering three-dimensional geometry data. Digital image compositing has also employed dedicated hardware designed specifically for compositing, whose functions are limited to compositing.
Accordingly, it would be desirable to composite digital images using a programmable graphics processor to perform the high-precision floating-point calculations.